﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;

namespace DataModels.Models
{
    public class CDCTarget : ModelBase
    {
        [Required]
        [StringLength(50)]
        [Column(TypeName = "varchar", Order = 0)]
        [ForeignKey("Facility")]
        [Key]
        public string FacilityCode { get; set; }

        public Facility Facility { get; set; }
        
        [Required]
        [StringLength(4)]
        [Display(Description = "COP Year")]
        [Key]
        [Column(Order = 1)]
        public string COPYear { get; set; }

        #region HTC
        public Nullable<bool> HTC_NGI_Direct { get; set; }

        [StringLength(10)]
        public string HTC_ServiceType { get; set; }
        #region HTC_TST: Number of individuals who received HIV Testing and Counseling (HTC) services for HIV and received their test results
        public Nullable<int> HTC_TST_MaleLT1 { get; set; }
        public Nullable<int> HTC_TST_FemaleLT1 { get; set; }

        public Nullable<int> HTC_TST_MaleBT1_4 { get; set; }
        public Nullable<int> HTC_TST_FemaleBT1_4 { get; set; }

        public Nullable<int> HTC_TST_MaleBT5_9 { get; set; }
        public Nullable<int> HTC_TST_FemaleBT5_9 { get; set; }

        public Nullable<int> HTC_TST_MaleBT10_14 { get; set; }
        public Nullable<int> HTC_TST_FemaleBT10_14 { get; set; }

        public Nullable<int> HTC_TST_MaleBT15_19 { get; set; }
        public Nullable<int> HTC_TST_FemaleBT15_19 { get; set; }

        public Nullable<int> HTC_TST_MaleBT20_24 { get; set; }
        public Nullable<int> HTC_TST_FemaleBT20_24 { get; set; }

        public Nullable<int> HTC_TST_MaleBT25_49 { get; set; }
        public Nullable<int> HTC_TST_FemaleBT25_49 { get; set; }

        public Nullable<int> HTC_TST_MaleGT50 { get; set; }
        public Nullable<int> HTC_TST_FemaleGT50 { get; set; }
        #endregion

        public Nullable<int> HTC_TST_ByTestResultPositive { get; set; }
        public Nullable<int> HTC_TST_ByTestResultNegative { get; set; }
        public Nullable<int> HTC_TST_ByCoupleIndividualPositive { get; set; }
        public Nullable<int> HTC_TST_ByCoupleIndividualNegative { get; set; }
        public Nullable<int> HTC_TST_ByCoupleCouplePositive { get; set; }
        public Nullable<int> HTC_TST_ByCoupleCoupleNegative { get; set; }
        #endregion

        #region Care and Support
        public Nullable<bool> TZ_CARE_NGI_Direct { get; set; }
        
        [StringLength(10)]
        public string TZ_CARE_ServiceType { get; set; }
        
        #region Care and Support - C2.1D: Number of HIV-positive adults and children receiving a minimum of one clinical service
        public Nullable<int> C21D_MaleLT15 { get; set; }
        public Nullable<int> C21D_FemaleLT15 { get; set; }

        public Nullable<int> C21D_MaleGT15 { get; set; }
        public Nullable<int> C21D_FemaleGT15 { get; set; }
        #endregion

        #region TZ_CARE: Number of HIV infected adults and children who received at least one care and support outside of a health facility
        public Nullable<int> TZ_CARE_MaleLT1 { get; set; }
        public Nullable<int> TZ_CARE_FemaleLT1 { get; set; }

        public Nullable<int> TZ_CARE_MaleBT1_4 { get; set; }
        public Nullable<int> TZ_CARE_FemaleBT1_4 { get; set; }

        public Nullable<int> TZ_CARE_MaleBT5_9 { get; set; }
        public Nullable<int> TZ_CARE_FemaleBT5_9 { get; set; }

        public Nullable<int> TZ_CARE_MaleBT10_14 { get; set; }
        public Nullable<int> TZ_CARE_FemaleBT10_14 { get; set; }

        public Nullable<int> TZ_CARE_MaleBT15_19 { get; set; }
        public Nullable<int> TZ_CARE_FemaleBT15_19 { get; set; }

        public Nullable<int> TZ_CARE_MaleBT20_24 { get; set; }
        public Nullable<int> TZ_CARE_FemaleBT20_24 { get; set; }

        public Nullable<int> TZ_CARE_MaleBT25_49 { get; set; }
        public Nullable<int> TZ_CARE_FemaleBT25_49 { get; set; }

        public Nullable<int> TZ_CARE_MaleGT50 { get; set; }
        public Nullable<int> TZ_CARE_FemaleGT50 { get; set; }
        #endregion
        #endregion

        #region TZ_NUT: Number of PLHIV or OVC who received food and/or other nutrition services outside of a health facility
        public Nullable<int> TZ_NUT_MaleLT1 { get; set; }
        public Nullable<int> TZ_NUT_FemaleLT1 { get; set; }

        public Nullable<int> TZ_NUT_MaleBT1_4 { get; set; }
        public Nullable<int> TZ_NUT_FemaleBT1_4 { get; set; }

        public Nullable<int> TZ_NUT_MaleBT5_14 { get; set; }
        public Nullable<int> TZ_NUT_FemaleBT5_14 { get; set; }

        public Nullable<int> TZ_NUT_MaleBT15_17 { get; set; }
        public Nullable<int> TZ_NUT_FemaleBT15_17 { get; set; }

        public Nullable<int> TZ_NUT_MaleGT18 { get; set; }
        public Nullable<int> TZ_NUT_FemaleGT18 { get; set; }
        #endregion

        #region TZ_ECON: Number of people reached with an intervention that explicitly aims to increase access to income and productive resources, including vocation training
        public Nullable<int> TZ_ECON_MaleLT1 { get; set; }
        public Nullable<int> TZ_ECON_FemaleLT1 { get; set; }

        public Nullable<int> TZ_ECON_MaleBT1_4 { get; set; }
        public Nullable<int> TZ_ECON_FemaleBT1_4 { get; set; }

        public Nullable<int> TZ_ECON_MaleBT5_9 { get; set; }
        public Nullable<int> TZ_ECON_FemaleBT5_9 { get; set; }

        public Nullable<int> TZ_ECON_MaleBT10_14 { get; set; }
        public Nullable<int> TZ_ECON_FemaleBT10_14 { get; set; }

        public Nullable<int> TZ_ECON_MaleBT15_19 { get; set; }
        public Nullable<int> TZ_ECON_FemaleBT15_19 { get; set; }

        public Nullable<int> TZ_ECON_MaleBT20_24 { get; set; }
        public Nullable<int> TZ_ECON_FemaleBT20_24 { get; set; }

        public Nullable<int> TZ_ECON_MaleBT25_49 { get; set; }
        public Nullable<int> TZ_ECON_FemaleBT25_49 { get; set; }

        public Nullable<int> TZ_ECON_MaleBT50_64 { get; set; }
        public Nullable<int> TZ_ECON_FemaleBT50_64 { get; set; }

        public Nullable<int> TZ_ECON_MaleGT65 { get; set; }
        public Nullable<int> TZ_ECON_FemaleGT65 { get; set; }
        #endregion

        #region Food & Nutrition - FN_THER: Proportion of clinically undernourished PLHIV who received therapeutic or supplementary food
        [StringLength(10)]
        public string FN_THER_ServiceType { get; set; }
        public Nullable<int> FN_THER_Num { get; set; }
        public Nullable<int> FN_THER_Denom { get; set; }
        #endregion

        #region TB/HIV
        public Nullable<bool> TB_HIV_NGI_Direct { get; set; }
        
        [StringLength(10)]
        public string TB_HIV_ServiceType { get; set; }
        public Nullable<int> TB_HIV_Num { get; set; }
        public Nullable<int> TB_HIV_Denom { get; set; }
        #endregion

        #region Treatment
        public Nullable<bool> TX_NGI_Direct { get; set; }

        [StringLength(10)]
        public string TX_ServiceType { get; set; }
        #region TX_NEW: Number of adults and children newly enrolled on ART
        public Nullable<int> TX_NEW_MaleLT1 { get; set; }
        public Nullable<int> TX_NEW_FemaleLT1 { get; set; }

        public Nullable<int> TX_NEW_MaleLT15 { get; set; }
        public Nullable<int> TX_NEW_FemaleLT15 { get; set; }

        public Nullable<int> TX_NEW_MaleGT15 { get; set; }
        public Nullable<int> TX_NEW_FemaleGT15 { get; set; }

        public Nullable<int> TX_NEW_PregnantWomen { get; set; }
        #endregion

        #region TX_CURR: Number of adults and children currently receiving ART
        public Nullable<int> TX_CURR_MaleLT1 { get; set; }
        public Nullable<int> TX_CURR_FemaleLT1 { get; set; }

        public Nullable<int> TX_CURR_MaleLT15 { get; set; }
        public Nullable<int> TX_CURR_FemaleLT15 { get; set; }

        public Nullable<int> TX_CURR_MaleGT15 { get; set; }
        public Nullable<int> TX_CURR_FemaleGT15 { get; set; }
        #endregion

        #region TX_RET: Percentage of adults and chilren known to be alive and on treatment 12 months after initiation of ART
        public Nullable<int> TX_RET_Num_0_4 { get; set; }
        public Nullable<int> TX_RET_Num_5_15 { get; set; }
        public Nullable<int> TX_RET_Num_LT15 { get; set; }
        public Nullable<int> TX_RET_Num_PregnantWomen { get; set; }
        public Nullable<int> TX_RET_Num_BreastFeeding { get; set; }

        public Nullable<int> TX_RET_Denom_0_4 { get; set; }
        public Nullable<int> TX_RET_Denom_5_15 { get; set; }
        public Nullable<int> TX_RET_Denom_LT15 { get; set; }
        public Nullable<int> TX_RET_Denom_PregnantWomen { get; set; }
        public Nullable<int> TX_RET_Denom_BreastFeeding { get; set; }
        #endregion
        #endregion

        #region PMTCT
        public Nullable<bool> PMTCT_NGI_Direct { get; set; }

        [StringLength(10)]
        public string PMTCT_ServiceType { get; set; }

        #region PMTCT_STAT: Percentage of pregnant women with known status (includes women who were tested for HIV and received their results)
        public Nullable<int> PMTCT_STAT_TestedPositive { get; set; }
        public Nullable<int> PMTCT_STAT_TestedNegative { get; set; }
        public Nullable<int> PMTCT_KnownPositive { get; set; }
        public Nullable<int> PMTCT_NewClients { get; set; }
        #endregion

        #region PMTCT_ARV: Percentage of HIV-positive pregnant women who received antiretrovirals
        public Nullable<int> PMTCT_ARV_OptionB_NewOnART { get; set; }
        public Nullable<int> PMTCT_ARV_OptionB_AlreadyOnART { get; set; }
        public Nullable<int> PMTCT_ARV_MaternalAZT { get; set; }
        public Nullable<int> PMTCT_ARV_Denom_PregnantWomenIdentified { get; set; }
        #endregion

        #region PMTCT_EID: Percentage of infants born to HIV-positive women who had a virologic HIV test done within 12 months of birth
        public Nullable<int> PMTCT_EID_TestedLT2 { get; set; }
        public Nullable<int> PMTCT_EID_TestedBT2_12 { get; set; }
        public Nullable<int> PMTCT_EID_TestedPositiveLT2 { get; set; }
        public Nullable<int> PMTCT_EID_TestedPositiveBT2_12 { get; set; }
        #endregion

        public Nullable<bool> P13D_ProvideANCServices { get; set; }
        #endregion

        
    }
}
